package pers.wensheng.patterns.creator_pattern.singleton_pattern.destroy_and_solve.serialization_mode;

import java.io.Serializable;

public class Singleton implements Serializable {

    private Singleton(){}

    private static Singleton instance;

    public static Singleton getInstance(){
        return SingletonHolder.INSTANCE;
    }

    //外界不能访问
    private static class SingletonHolder {
        //在内部类中声名并初始化外部类的对象
        public static final Singleton INSTANCE = new Singleton();
    }

    /**
     *  解决：
     *  当进行反序列化的时候，会自动调用这个方法，将方法的返回值值直接返回，能解决破环单例模式
     *  源码在：ois.readObject() 里面，会先检查是否在定义了这个名字的方法，定义了则调用
     * @return  SingletonHolder.INSTANCE
     */
    public Object readResolve(){
        return SingletonHolder.INSTANCE;
    }
}
